package pri.damai.xiaowu.auth.security.model;

import lombok.*;
import lombok.experimental.Accessors;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import pri.damai.xiaowu.common.security.model.AuthRole;

import java.time.LocalDateTime;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 自定义用户信息
 * @Desc
 * @Author DaMai
 * @Date 2021/10/13 17:47
 * 但行好事，莫问前程。
 */
@Accessors(chain = true)
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class UserInfo implements UserDetails {

    /** 账号id **/
    private String id;
    /** 头像地址 */
    private String avatarUrl;
    /** 性别 */
    private String gender;
    /** 手机号 **/
    private String phone;
    /** 用户名 **/
    private String username;
    /** 密码 **/
    private String password;
    /** 证书地址 */
    private String caPath;
    /** 机构Id */
    private String orgId;
    /** 机构名称 */
    private String orgName;
    /** 创建时间 */
    private LocalDateTime createTime;
    /** 系统列表 */
    private List<Integer> systemList;
    /** 角色集合 */
    private List<AuthRole> roleList;

    /**
     * 获取用户拥有的角色
     * @apiNote 此处为角色Id列表。
     * @return java.util.Collection<org.springframework.security.core.GrantedAuthority>
     * @author DaMai
     * @date 2021/7/17 14:50
     */
    @Override
    public Collection<GrantedAuthority> getAuthorities() {
        return roleList.stream()
                .map(AuthRole::getId)
                .map(SimpleGrantedAuthority::new)
                .collect(Collectors.toList());
    }

    @Override
    public String getPassword() {
        return this.password;
    }

    @Override
    public String getUsername() {
        return this.username;
    }

    /**
     * 账户是否未过期
     */
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    /**
     * 是否未被锁定
     */
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    /**
     * 密码是否未过期
     */
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    /**
     * 账户是否可用
     */
    @Override
    public boolean isEnabled() {
        return true;
    }
}
